#include<bits/stdc++.h>
#define XH(i,a,b) for(int i=a;i<b;++i)
#define XXH(i,a,b) for(int i=a;i>b;--i)
#define LL long long
using namespace std;
int tmpINT; string tmpSTRING; char tmpCHAR; double tmpDOUBLE; LL tmpLONGLONG;

int n;

bool solve_2(int num,int a[]){
	int init = num;
	vector<int>visit(2*n,0);
	int x,y;
	int left,right,mid;
	vector<int>ans(2*n);
	int cnt = 0;
	while(1){
		x = -1;
		XXH(i , 2*n-1 , -1)
			if(visit[i] == 0){
				visit[i] = 1;
				x=a[i];
				right = i -1;
				break;
			}
		if(x == -1){
			printf("YES\n%d\n", init);
			for(int i=0;i<2*n;i+=2){
				printf("%d %d\n", ans[i],ans[i+1]);
			}
			return true;
		}
		left = 0;
		y = num - x;
		int yes = 0;
		while(left<=right){
			mid = (right-left)/2+left;
			// printf("a[mid] = %d, y =%d\n", a[mid],y);
			if(a[mid] == y){
				yes = 1;
				break;
			}else if(a[mid]>y){
				right = mid -1;
			}else left = mid + 1;
		}
		if(yes){
			if(visit[mid] == 1){
				int index = mid+1;
				while(index<2*n&&visit[index] == 1)++index;
				if(index == 2*n || a[index] != y){
					index = mid -1 ;
					while(index>=0&&visit[index] == 1)--index;
				}
				if(index == -1 || a[index] != y)break;
				mid = index;
			}
			ans[cnt++]=x;
			ans[cnt++]=y;
			visit[mid] = 1;
		}else{
			break;
		}
		// printf("x= %d y =%d\n",x,y );
		num = max(x,y);
	}
	return false;
}

void solve(int a[]){
	XH(i , 0 , 2*n-1){
		int num = a[2*n-1]+a[i];
		// printf("num = %d\n", num);
		if(solve_2(num,a)){
			return;
		}
	}
	printf("NO\n");
}

int main(){
	int t;scanf("%d", &t);
	XH(i , 0 , t){
		scanf("%d", &n);
		int a[2*n];
		XH(i , 0 , 2*n)scanf("%d", &a[i]);
		sort(a,a+2*n);
		solve(a);
	}
	
	return 0;
}